#define USE_BOOST_FS_IMPL
#if !defined(USE_BOOST_FS_IMPL)
#	if defined(WIN32) || defined(WIN32)
#		define F_HAS_OS_API_SUPPORT
#		include "impl/windows.h"
#	endif
#endif

#if !defined(USE_BOOST_FS_IMPL)
#	if defined(__unix__) || defined(__lunix__)
#		define F_HAS_OS_API_SUPPORT
#		include "impl/lunix.h"
#	endif
#endif

#if defined(USE_BOOST_FS_IMPL)
#	define F_HAS_OS_API_SUPPORT
#	include "impl/boost.h"
#endif

#if defined(F_HAS_OS_API_SUPPORT)
#	undef F_HAS_OS_API_SUPPORT
#else
#	error "filesystem.h : OS not supported"
#endif

#include "filesystem.h"

namespace adapters { namespace filesystem {

		OffsetType fileSize(std::string const & fileName) {
			return details::nativeFileSize(fileName);
		}

		bool rename(std::string const & from, std::string const & to) {
			return details::nativeRename(from, to);
		}

		bool remove(std::string const & fileName) {
			return details::nativeRemove(fileName);
		}

		bool swap(std::string const & first, std::string const & second, bool const safe) {
			return details::nativeSwap(first, second, safe);
		}

		bool createDir(std::string const & name) {
			return details::nativeCreateDir(name);
		}

		bool exists(std::string const & name) {
			return details::nativeExists(name);
		}
		std::string makeHiddenFileName(std::string const & fileName, char const filePrefix) {
			return details::nativeHiddenMakeFileName(fileName, filePrefix);
		}

		bool hide(std::string const & fileName) {
			return details::nativeHideFile(fileName);
		}

		bool unHide(std::string const & fileName){
			return details::nativeUnHideFile(fileName);
		}
	}
}
